// dishes.js
const app = getApp()

Page({
  data: {
    dishes: [],
    filteredDishes: [], // 筛选后的服务列表
    totalDishes: 0,
    availableDishes: 0,
    unavailableDishes: 0,
    showModal: false,
    editingDish: null,
    dishForm: {
      name: '',
      desc: '',
      category: '大菜',
      price: 0,
      available: true,
      image: ''
    },
    categories: ['大菜', '小菜', '茶点', '饮品', '套餐'],
    categoryIndex: 0,
    // 筛选状态
    filterStatus: 'all', // 'all', 'available', 'unavailable'
    activeFilter: 'all' // 当前激活的筛选项
  },

  onLoad() {
    // 注册页面实例，用于触发服务数据变化通知
    app.registerPage(this)
    
    // 确保分类数据正确初始化
    console.log('页面加载 - 分类数据:', this.data.categories)
    console.log('页面加载 - 分类索引:', this.data.categoryIndex)
    
    this.loadDishes()
  },

  onUnload() {
    // 注销页面实例
    app.unregisterPage(this)
  },

  onShow() {
    this.loadDishes().catch(error => {
      console.error('页面显示时加载服务失败:', error)
    })
  },

  // 加载服务数据
  async loadDishes() {
    console.log('开始加载服务数据...')
    
    try {
      // 先尝试从云数据库同步最新数据
      await app.syncDishesData()
      
      // 获取同步后的数据
      const dishes = app.globalData.dishes || []
      const totalDishes = dishes.length
      const availableDishes = dishes.filter(dish => dish.available).length
      const unavailableDishes = totalDishes - availableDishes

      console.log('服务数据加载完成:', {
        total: totalDishes,
        available: availableDishes,
        unavailable: unavailableDishes
      })

      this.setData({
        dishes,
        totalDishes,
        availableDishes,
        unavailableDishes
      })
      
      // 应用当前筛选
      this.applyFilter()
      
      return dishes
    } catch (error) {
      console.error('加载服务数据失败:', error)
      
      // 降级到本地数据
      const dishes = app.globalData.dishes || []
      const totalDishes = dishes.length
      const availableDishes = dishes.filter(dish => dish.available).length
      const unavailableDishes = totalDishes - availableDishes

      this.setData({
        dishes,
        totalDishes,
        availableDishes,
        unavailableDishes
      })
      
      // 应用当前筛选
      this.applyFilter()
      
      return dishes
    }
  },

  // 添加服务
  addDish() {
    // 安全地初始化表单数据，确保所有字段都有默认值
    const safeDishForm = {
      name: '',
      desc: '',
      category: '大菜',
      price: 0,
      available: true,
      image: ''
    }
    
    console.log('初始化添加服务表单:', safeDishForm)
    console.log('分类数据验证:', {
      categories: this.data.categories,
      categoryIndex: this.data.categoryIndex,
      selectedCategory: this.data.categories[this.data.categoryIndex]
    })
    
    this.setData({
      showModal: true,
      editingDish: null,
      dishForm: safeDishForm,
      categoryIndex: 0
    })
  },

  // 应用筛选
  applyFilter() {
    const { dishes, filterStatus } = this.data
    let filteredDishes = []
    
    switch (filterStatus) {
      case 'available':
        filteredDishes = dishes.filter(dish => dish.available)
        break
      case 'unavailable':
        filteredDishes = dishes.filter(dish => !dish.available)
        break
      case 'all':
      default:
        filteredDishes = dishes
        break
    }
    
    console.log('应用筛选:', filterStatus, '结果数量:', filteredDishes.length)
    
    this.setData({
      filteredDishes
    })
  },

  // 切换筛选状态
  toggleFilter(e) {
    const filterType = e.currentTarget.dataset.filter
    console.log('切换筛选:', filterType)
    
    this.setData({
      filterStatus: filterType,
      activeFilter: filterType
    })
    
    // 应用筛选
    this.applyFilter()
  },

  // 重置筛选
  resetFilter() {
    console.log('重置筛选')
    
    this.setData({
      filterStatus: 'all',
      activeFilter: 'all'
    })
    
    // 应用筛选
    this.setData({
      filteredDishes: this.data.dishes
    })
  },

  // 编辑服务
  editDish(e) {
    const dishId = e.currentTarget.dataset.id
    console.log('编辑服务，ID:', dishId)
    
    // 支持多种ID格式查找
    const dish = this.data.dishes.find(d => (d._id === dishId || d.id === dishId))
    
    if (dish) {
      console.log('找到要编辑的服务:', dish)
      const categoryIndex = this.data.categories.findIndex(cat => cat === dish.category)
      
      // 安全地初始化表单数据，确保所有字段都有值
      const safeDishForm = {
        name: dish.name || '',
        desc: dish.desc || dish.description || '',
        category: dish.category || '大菜',
        price: dish.price || 0,
        available: dish.available !== undefined ? dish.available : true,
        image: dish.image || ''
      }
      
      console.log('安全的表单数据:', safeDishForm)
      
      this.setData({
        showModal: true,
        editingDish: dish,
        dishForm: safeDishForm,
        categoryIndex: categoryIndex >= 0 ? categoryIndex : 0
      })
    } else {
      console.error('未找到要编辑的服务，ID:', dishId)
      wx.showToast({ 
        title: '服务不存在', 
        icon: 'error' 
      })
    }
  },

  // 切换服务可用状态
  async toggleAvailability(e) {
    const dishId = e.currentTarget.dataset.id
    const dish = this.data.dishes.find(d => (d._id === dishId || d.id === dishId))
    
    if (dish) {
      const updateData = { available: !dish.available }
      
      wx.showLoading({ title: '更新中...', mask: true })
      
      try {
        const result = await app.updateDish(dish._id || dish.id, updateData)
        
        if (result) {
          wx.hideLoading()
          const action = result.available ? '上架' : '停售'
          wx.showToast({ title: `已${action}`, icon: 'success' })
          
          // 触发全局同步
          this.triggerGlobalSync()
          
          // 重新加载服务列表
          await this.loadDishes()
          
          console.log('服务状态更新完成，页面已刷新')
        } else {
          wx.hideLoading()
          wx.showToast({ title: '操作失败', icon: 'error' })
        }
      } catch (error) {
        wx.hideLoading()
        console.error('切换服务状态失败:', error)
        wx.showToast({ 
          title: '操作失败: ' + (error.message || error), 
          icon: 'error' 
        })
      }
    }
  },

  // 删除服务
  deleteDish(e) {
    const dishId = e.currentTarget.dataset.id
    const dish = this.data.dishes.find(d => (d._id === dishId || d.id === dishId))
    
    wx.showModal({
      title: '确认删除',
      content: `确定要删除服务"${dish.name}"吗？此操作不可恢复。`,
      success: async (res) => {
        if (res.confirm) {
          wx.showLoading({ title: '删除中...', mask: true })
          
          try {
            const result = await app.deleteDish(dish._id || dish.id)
            
            if (result) {
              wx.hideLoading()
              wx.showToast({ title: '删除成功', icon: 'success' })
              
              // 触发全局同步
              this.triggerGlobalSync()
              
              // 重新加载服务列表
              await this.loadDishes()
              
              console.log('服务删除完成，页面已刷新')
            } else {
              wx.hideLoading()
              wx.showToast({ title: '删除失败', icon: 'error' })
            }
          } catch (error) {
            wx.hideLoading()
            console.error('删除服务失败:', error)
            wx.showToast({ 
              title: '删除失败: ' + (error.message || error), 
              icon: 'error' 
            })
          }
        }
      }
    })
  },

  // 关闭弹窗
  closeModal() {
    this.setData({ showModal: false })
  },

  // 阻止事件冒泡
  stopPropagation() {
    // 在微信小程序中，使用catchtap已经可以阻止事件冒泡
    return false
  },

  // 服务名称输入
  onNameInput(e) {
    this.setData({
      'dishForm.name': e.detail.value
    })
  },

  // 服务描述输入
  onDescInput(e) {
    this.setData({
      'dishForm.desc': e.detail.value
    })
  },









  // 显示简化版picker
  showSimplePicker() {
    console.log('显示简化版picker')
    
    // 使用微信的actionSheet来模拟picker
    wx.showActionSheet({
      itemList: this.data.categories,
      success: (res) => {
        console.log('简化版picker选择结果:', res)
        const index = res.tapIndex
        this.setData({
          categoryIndex: index,
          'dishForm.category': this.data.categories[index]
        })
        
        wx.showToast({
          title: `已选择: ${this.data.categories[index]}`,
          icon: 'success',
          duration: 1500
        })
      },
      fail: (res) => {
        console.log('简化版picker失败:', res)
        wx.showToast({
          title: '选择取消',
          icon: 'none',
          duration: 1000
        })
      }
    })
  },

  // 可用状态切换
  onAvailableChange(e) {
    this.setData({
      'dishForm.available': e.detail.value
    })
  },

  // 服务价格输入
  onPriceInput(e) {
    const price = parseFloat(e.detail.value) || 0
    this.setData({
      'dishForm.price': price
    })
  },

  // 选择图片
  chooseImage() {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const tempFilePath = res.tempFilePaths[0]
        
        // 显示上传中提示
        wx.showLoading({
          title: '上传中...',
          mask: true
        })
        
        // 上传图片到云存储
        this.uploadDishImageToCloud(tempFilePath)
      }
    })
  },

  // 上传服务图片到云存储
  async uploadDishImageToCloud(tempFilePath) {
    try {
      // 生成唯一的文件名
      const timestamp = Date.now()
      const randomStr = Math.random().toString(36).substring(2, 8)
      const fileExtension = tempFilePath.split('.').pop()
      // 使用家庭ID作为图片存储路径前缀，确保所有家庭成员都能访问
      const cloudPath = `xiaoweichufang/dishes/dish_${timestamp}_${randomStr}.${fileExtension}`
      
      console.log('开始上传服务图片到云存储:', cloudPath)
      
      // 上传到云存储
      const uploadResult = await wx.cloud.uploadFile({
        cloudPath: cloudPath,
        filePath: tempFilePath
      })
      
      console.log('服务图片上传成功:', uploadResult)
      
      // 设置云存储URL
      this.setData({
        'dishForm.image': uploadResult.fileID
      })
      
      wx.hideLoading()
      wx.showToast({
        title: '图片上传成功',
        icon: 'success'
      })
      
    } catch (error) {
      console.error('服务图片上传失败:', error)
      wx.hideLoading()
      wx.showToast({
        title: '图片上传失败',
        icon: 'error'
      })
    }
  },

  // 保存服务
  async saveDish() {
    const { dishForm, editingDish } = this.data
    
    console.log('保存服务 - 表单数据:', dishForm)
    console.log('保存服务 - 编辑状态:', editingDish)
    console.log('保存服务 - 表单字段详情:', {
      name: dishForm.name,
      desc: dishForm.desc,
      category: dishForm.category,
      price: dishForm.price,
      available: dishForm.available,
      image: dishForm.image
    })
    
    // 验证表单
    if (!dishForm.name || !dishForm.name.trim()) {
      console.error('服务名称为空或undefined:', dishForm.name)
      wx.showToast({ title: '请输入服务名称', icon: 'none' })
      return
    }
    
    if (!dishForm.desc || !dishForm.desc.trim()) {
      console.error('服务描述为空或undefined:', dishForm.desc)
      wx.showToast({ title: '请输入服务描述', icon: 'none' })
      return
    }

    if (!dishForm.price || dishForm.price <= 0) {
      console.error('服务价格无效:', dishForm.price)
      wx.showToast({ title: '请输入有效的服务价格', icon: 'none' })
      return
    }

    wx.showLoading({ title: '保存中...', mask: true })

    try {
      if (editingDish) {
        // 编辑现有服务
        const dishId = editingDish._id || editingDish.id
        console.log('开始编辑服务，ID:', dishId)
        console.log('编辑的服务数据:', editingDish)
        // 确保编辑时也包含 familyId
        const dishDataWithFamily = {
          ...dishForm,
          familyId: 'xiaoweichufang' // 统一使用固定的家庭ID
        }
        console.log('更新的表单数据（包含familyId）:', dishDataWithFamily)
        
        const result = await app.updateDish(dishId, dishDataWithFamily)
        
        if (result) {
          wx.hideLoading()
          wx.showToast({ title: '编辑成功', icon: 'success' })
          
          // 关闭弹窗
          this.closeModal()
          
          // 重新加载服务列表
          await this.loadDishes()
          
          // 触发全局同步
          this.triggerGlobalSync()
          
          console.log('服务编辑完成，页面已刷新')
        } else {
          wx.hideLoading()
          
          // 检查是否是权限问题
          if (result && result.error && result.error.includes('权限不足')) {
            wx.showToast({ 
              title: '权限不足，只能编辑自己创建的服务', 
              icon: 'error',
              duration: 3000
            })
          } else {
            wx.showToast({ title: '编辑失败', icon: 'error' })
          }
          return
        }
      } else {
        // 添加新服务
        console.log('开始添加服务')
        // 确保服务数据包含 familyId
        const dishDataWithFamily = {
          ...dishForm,
          familyId: 'xiaoweichufang' // 统一使用固定的家庭ID
        }
        console.log('新服务数据（包含familyId）:', dishDataWithFamily)
        const result = await app.addDish(dishDataWithFamily)
        
        if (result) {
          wx.hideLoading()
          wx.showToast({ title: '添加成功', icon: 'success' })
          
          // 关闭弹窗
          this.closeModal()
          
          // 重新加载服务列表
          await this.loadDishes()
          
          // 触发全局同步
          this.triggerGlobalSync()
          
          console.log('服务添加完成，页面已刷新')
        } else {
          wx.hideLoading()
          wx.showToast({ title: '添加失败', icon: 'error' })
          return
        }
      }
    } catch (error) {
      wx.hideLoading()
      console.error('保存服务失败:', error)
      wx.showToast({ 
        title: '保存失败: ' + (error.message || error), 
        icon: 'error' 
      })
    }
  },

  // 页面下拉刷新
  onPullDownRefresh() {
    this.loadDishes()
    wx.stopPullDownRefresh()
  },



  // 触发全局同步事件
  triggerGlobalSync() {
    console.log('触发全局同步事件')
    
    // 设置全局同步标志
    wx.setStorageSync('forceSyncDishes', true)
    wx.setStorageSync('syncTimestamp', Date.now())
    
    // 如果有点餐页面实例，直接通知
    const pages = getCurrentPages()
    pages.forEach(page => {
      if (page.route && page.route.includes('dishes') && page !== this) {
        console.log('找到点餐页面，直接通知:', page.route)
        if (typeof page.onDishesDataChanged === 'function') {
          page.onDishesDataChanged(app.globalData.dishes)
        }
      }
    })
  },


}) 